#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
游戏打包脚本
使用PyInstaller将游戏打包成exe
"""

import os
import sys
import subprocess
import shutil

def install_pyinstaller():
    """安装PyInstaller"""
    print("正在安装PyInstaller...")
    try:
        subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
        print("PyInstaller安装成功")
        return True
    except subprocess.CalledProcessError:
        print("PyInstaller安装失败")
        return False

def build_exe():
    """构建exe文件"""
    print("开始构建exe文件...")
    
    # PyInstaller命令参数
    cmd = [
        "pyinstaller",
        "--onefile",           # 打包成单个exe文件
        "--windowed",          # 不显示控制台窗口
        "--name=MiningSimulator",  # 设置exe文件名
        "--icon=icon.ico",     # 设置图标（如果有的话）
        "--add-data=config.json;.",  # 包含配置文件（如果存在）
        "--hidden-import=tkinter",
        "--hidden-import=tkinter.ttk",
        "main.py"
    ]
    
    # 如果没有图标文件，移除图标参数
    if not os.path.exists("icon.ico"):
        cmd = [arg for arg in cmd if not arg.startswith("--icon")]
    
    # 如果没有配置文件，移除数据参数
    if not os.path.exists("config.json"):
        cmd = [arg for arg in cmd if not arg.startswith("--add-data")]
    
    try:
        subprocess.check_call(cmd)
        print("\\n构建成功!")
        print("可执行文件位置: dist/MiningSimulator.exe")
        return True
    except subprocess.CalledProcessError as e:
        print(f"构建失败: {e}")
        return False
    except FileNotFoundError:
        print("PyInstaller未找到，正在尝试安装...")
        if install_pyinstaller():
            return build_exe()  # 重试构建
        return False

def clean_build():
    """清理构建文件"""
    print("清理构建文件...")
    dirs_to_remove = ["build", "__pycache__"]
    files_to_remove = ["*.spec"]
    
    for dir_name in dirs_to_remove:
        if os.path.exists(dir_name):
            shutil.rmtree(dir_name)
            print(f"已删除 {dir_name}")
    
    # 清理.pyc文件
    for root, dirs, files in os.walk("."):
        for file in files:
            if file.endswith('.pyc'):
                os.remove(os.path.join(root, file))

def main():
    """主函数"""
    print("=" * 50)
    print("挖矿模拟器：摸鱼版 - 构建脚本")
    print("=" * 50)
    
    if build_exe():
        print("\\n构建完成！")
        print("你可以在 dist/MiningSimulator.exe 找到可执行文件")
        
        # 询问是否清理构建文件
        response = input("\\n是否清理构建文件？(y/n): ")
        if response.lower() in ['y', 'yes']:
            clean_build()
            print("清理完成")
    else:
        print("\\n构建失败，请检查错误信息")

if __name__ == "__main__":
    main()